/*
 Práctica 1 asignatura Desarrollo Aplicaciones Móviles

    -Informática-

Integrantes:  Esperanza González de la Mora & Félix López Garcinuño & José Miguel Bilbao Navas
 */

package capa_interfaz;

import capa_dominio.*;
import miCartera.MiCartera;
import java.util.Calendar;
import java.util.Date;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class FAnadeGasto implements CommandListener , ItemStateListener{
    private MiCartera midlet;
    private Form formanadegasto;
    private Command regresar, aceptar, nuevamoneda;
    private DateField campoDate;
    private TextField categoria;
    private TextField cantidad;
    private ChoiceGroup eligemoneda;
    private ControladorInterfaz contrinterfaz;
    private String[] listamonedas;
    public String campofecha, campocategoria, campocantidad;
    public int indicecampomoneda=0;

    public FAnadeGasto(MiCartera midlet, ControladorInterfaz controlador){
        //Guardo referencia al midlet con pantalla principal
        this.midlet=midlet;

        //Guardo referencia a controlador para delegar peticiones
        this.contrinterfaz=controlador;

        //Creo los objetos
        formanadegasto=new Form("Añade Gasto Nuevo");
        campoDate=new DateField("Establece fecha", DateField.DATE);
        categoria=new TextField("Categoria del gasto","", midlet.pantallainicial.getWidth(),TextField.ANY);
        cantidad=new TextField("Cantidad del gasto", "", midlet.pantallainicial.getWidth(),TextField.NUMERIC);
        eligemoneda=new ChoiceGroup("Lista Monedas",Choice.EXCLUSIVE);
        regresar=new Command("Atras",Command.BACK,1);
        aceptar=new Command("Aceptar", Command.OK,1);
        nuevamoneda=new Command("Crear Nueva Moneda", Command.OK, 1);

        //Inicializo valores
        campofecha=null;
        campocategoria=null;
        campocantidad=null;

        //Establezco en DateField la fecha actual como referencia
        Date fechaactual=new Date();
        campoDate.setDate(fechaactual);
       
        //Extraigo lista de monedas
        listamonedas=contrinterfaz.extraeMonedas();

        //Caluculo número de registros por tamaño de array
        double n=(-2+Math.sqrt(4+4*listamonedas.length))/2;
        System.out.println("Número de n, número de registros calculados por array:"+String.valueOf(n));
        //Pasamos a entero redondeando hacia abajo
        int nentero=(int)n;

        for (int i=0; i<= listamonedas.length-1;i=i+nentero+2){
            String cadena=null;
            cadena=listamonedas[i]+":"+listamonedas[i+1];
            eligemoneda.append(cadena, null);
        }

        //Enlazo Items al formulario de pantalla
        formanadegasto.append(campoDate);
        formanadegasto.append(categoria);
        formanadegasto.append(cantidad);
        formanadegasto.append(eligemoneda);

         //Enlazo objetos a Form y escucha de comandos
        formanadegasto.addCommand(regresar);
        formanadegasto.addCommand(aceptar);
        formanadegasto.addCommand(nuevamoneda);
        formanadegasto.setCommandListener(this);

        //Hago escucha de Items
        formanadegasto.setItemStateListener(this);

        //Establecemos como pantalla
        midlet.pantalla.setCurrent(formanadegasto);


    }

    public void commandAction(Command c, Displayable d) {
        if (c==regresar){
            midlet.pantalla.setCurrent(midlet.pantallainicial);
        }else if (c==aceptar){
            contrinterfaz.andeGastoRecordStore(this);
        }else if (c==nuevamoneda){
            contrinterfaz.nuevaMoneda();
        }
    }

    
    public void itemStateChanged(Item item) {

        if (item==campoDate){
            //Extraemos date de datefield
            Date fecha=new Date();
            fecha=campoDate.getDate();
            System.out.println(fecha.toString());
            //Utilizamos un objeto Calendar para manejar dia,mes,año
            Calendar cal = Calendar.getInstance();
            cal.setTime(fecha);
            //Establecemos campofecha a modo String
            int dia=cal.get(Calendar.DAY_OF_MONTH);
            int mes=cal.get(Calendar.MONTH)+1;
            int ano=cal.get(Calendar.YEAR);

            campofecha=(dia<10? "0": "")+dia+"-"+(mes<10? "0": "")+mes+"-"+(ano<10? "0": "")+ano;

           System.out.println(campofecha);


        }else if (item==categoria){
            //Extraemos campo categoria de un textfield de cadenas
            campocategoria=categoria.getString();

        }else if (item==cantidad){
            //Extraemos campo cantidad de un texfield numérico
            campocantidad=cantidad.getString();

        }else if (item==eligemoneda){
            indicecampomoneda=eligemoneda.getSelectedIndex();

        }else{
            midlet.pantalla.setCurrent(formanadegasto);
        }
    }

    public void muestraErrorFecha(){
        Alert alertaerror;

        alertaerror=new Alert("Alerta", "Introduce fecha", null, AlertType.ERROR);
        alertaerror.setTimeout(Alert.FOREVER);//Alerta modal
        //Establecemos alert para mostrar y posteriormente a foranadegasto
        midlet.pantalla.setCurrent(alertaerror, formanadegasto);

    }
    public void muestraErrorCategoria(){
        Alert alertaerror;

        alertaerror=new Alert("Alerta", "Introduce categoria", null, AlertType.ERROR);
        alertaerror.setTimeout(Alert.FOREVER);//Alerta modal
        midlet.pantalla.setCurrent(alertaerror, formanadegasto);

    }
    public void muestraErrorCantidad(){
        Alert alertaerror;

        alertaerror=new Alert("Alerta", "Introduce cantidad", null, AlertType.ERROR);
        alertaerror.setTimeout(Alert.FOREVER);//Alerta modal
        midlet.pantalla.setCurrent(alertaerror, formanadegasto);

    }
    public void avisoCreacion(){
        Alert alerta;

        alerta=new Alert("Aviso", "Cangrulations!Has creado un gasto nuevo", null, AlertType.INFO);
        alerta.setTimeout(Alert.FOREVER);//Alerta modal
        //Despues establecemos el form de pantallainicial 
        midlet.pantalla.setCurrent(alerta, midlet.pantallainicial);

    }

}
